package com.hhsj.design.pullableview.ability;

import androidx.annotation.NonNull;

import com.hhsj.design.pullableview.view.IRefreshView;

//下拉 = 下拉
public interface IPullDownAble {

    enum HeaderState {
        //正常
        NORMAL,
        //下拉为了刷新
        FOR_REFRESH,
        //松手可刷新
        CAN_REFRESH,
        //松手后刷新前
        TO_REFRESH,
        //正在刷新
        REFRESHING,
        //可继续下拉
        CAN_CONTINUE,
        //由刷新到正常，或由可继续下拉到正常
        TO_NORMAL;
    }

    int REFRESH_VIEW_MODE_TOP = 0;//头部上边刷新
    int REFRESH_VIEW_MODE_MID = 1;//头部下面的刷新

    /**
     * 例如 100 高度可以刷新
     * <p>
     * 松手，height = 0, NORMAL   1
     * <p>
     * 下拉,0 < height < 100 ,BEFORE_CAN_REFRESH 2
     * <p>
     * 下拉,height >= 100, CAN_REFRESH 3
     * <p>
     * 松手,height > 100 ,GOING_REFRESH 4
     * <p>
     * 松手,height = 100， REFRESHING 5
     * <p>
     * 调用停止, 0 < height < 100，BACKING_NORMAL 6
     * 松手 height = 0 ，NORMAL
     */
    int NORMAL = 0;  //height = 0
    int BEFORE_CAN_REFRESH = 2;//开始下拉，还不能触发刷新 0 < height < 100
    int CAN_REFRESH = 3;//开始下拉，可以触发刷新 height >= 100 下拉
    int GOING_REFRESH = 4;//松手，触发并正在刷新 height >= 100 松手
    int REFRESHING = 5;//松手，触发并正在刷新 //height = 100
    int BACKING_NORMAL = 6;//松手，调用停止 0 < height < 100，

    interface PullDownAbleListener {
        /**
         * 继续下来
         *
         * @return 是否恢复，true 恢复，false 不恢复
         */
        boolean onContinuePullAction();

        /**
         * 开始刷新
         */
        void doRefresh();

    }

    /**
     * 添加 拉拽监听
     *
     * @param listener
     */
    void setPullDownAbleListener(PullDownAbleListener listener);

    /**
     * 设置是否支持继续下拉功能
     *
     * @param continuePullEnable
     */
    void setContinuePullEnable(boolean continuePullEnable);

    boolean isContinuePullEnable();

    /**
     * 设置头部是否可以刷新
     *
     * @param refreshEnable
     */
    void setRefreshEnable(boolean refreshEnable);

    boolean isRefreshEnable();


    /**
     * 设置刷新控件位置
     *
     * @param refreshViewMode
     */
    void setRefreshViewMode(int refreshViewMode);

    int getRefreshViewMode();

    /**
     * 停止刷新
     */
    void stopRefresh();

    /**
     * 添加刷新
     *
     * @param refreshHeader
     */
    void addRefreshView(IRefreshView refreshHeader, int refreshHeight);

}
